/* 常量变量 */
function demoLetConst() {
    console.log("hello");

    // var a = 123

    // 变量
    let name = "steve"
    name = "steveouyang"

    // 常量
    const legs = 4
    // legs = 8

    // 我们通常倾向于将引用数据类型声明为常量
    // 目的是不希望修改arr的地址
    // 地址内的具体内容依然可以随意修改
    const arr = []
    arr.push(1, 2, 3)
    console.log(arr);

    // 给常量重新赋值就会报错
    arr = []
    console.log("代码走到此处可以直接毕业");
}

/* 箭头函数 */
function demoArrowFunction(){
    let add = (a,b)=>{
        return a+b
    }
    add = (a,b) => a+b
    // console.log(add(2,3));

    // 常规函数中的this是调用者 没有明确的调用者 则调用者是window/node顶级对象
    function sayHello(){
        console.log("sayHello from",this);
    }

    const obj = {
        name:"欧毕节",
        fn:sayHello
    }

    // 箭头函数的this直接从外界继承

    // sayHello()
    obj.fn()

}
// demoArrowFunction()

/* 数组和对象的解构 */
function demoDestruct(){
    const obj = {
        name:"欧毕节",
        age:18,
        wife:{
            name:"如花",
            age:60
        }
    }

    let {name,age} = obj
    
    let {wife:{name:n,age:a}} = obj
    console.log(name,age);
    console.log(n,a);

    const arr = [1,2,3]
    let [i1,i2] = arr
    console.log(i1,i2);
}
// demoDestruct()

/* 对象的简写 */
function demoSimplifiedObj(){
    let name = "欧毕节"
    let age = 18
    const obj = {
        name:name,
        age:age
    }
    console.log(obj);

    const obj2 = {
        name,
        age
    }
    console.log(obj2);
}
// demoSimplifiedObj()